#include <bits/stdc++.h>
#define N 1005
#define mxV N*N*4
using namespace std;
typedef long long ll;

int r, c, n;
int Sx, Sy, Tx, Ty, S, T;

int tot, dis[mxV];
bool vst[mxV];
vector <int> to[mxV];
vector <bool> ww[mxV];

int dx[4]={ 0, 1, 0, -1 };
int dy[4]={ 1, 0, -1, 0 };

char tmp[N*N];
string mp[N];

inline int id (int i, int j) { return (i-1)*c+j; }
void add (int u, int v, int w) { to[u].push_back(v); ww[u].push_back(w); }

void bfs ()
{
    deque <int> q;

    vst[S]=1; q.push_back(S);

    while (!q.empty()) {
        int u=q.front(); q.pop_front();

        for (int i=0; i<(int)to[u].size(); i++) {
            int v=to[u][i], w=ww[u][i];
            if (vst[v]) { continue; }
            
            vst[v]=1; dis[v]=dis[u]+w;
            if (v==T) { break; }

            if (!w) { q.push_front(v); }
            else { q.push_back(v); }
        }
        if (vst[T]) { break; }
    }

    printf("%d\n", dis[T]);
}

int main ()
{
    freopen("stamp.in", "r", stdin);
    freopen("stamp.out", "w", stdout);

    scanf("%d %d %d", &r, &c, &n);
    scanf("%d %d", &Sx, &Sy);
    scanf("%d %d", &Tx, &Ty);
    for (int i=1; i<=r; i++) { scanf("%s", tmp); mp[i]=tmp; mp[i]='x'+mp[i]; }

    tot=r*c;

    for (int idi=-n+2; idi<=r; idi++) {
        for (int idj=-n+2; idj<=c; idj++) {
            int j=max(1, idj), i=max(1, idi), mxj=min(c, idj+n-1), mxi=min(r, idi+n-1);

            // if (mxi==6 && mxj==3){ cout<<i<<" "<<mxi<<" "<<j<<" "<<mxj<<"?\n"; }

            if (mp[i][j]=='#' || mp[mxi][j]=='#' || mp[i][mxj]=='#' || mp[mxi][mxj]=='#') {
                tot++;
                if (mp[i][j]=='#') { add(id(i,j), tot, 1); }
                if (mp[mxi][j]=='#') { add(id(mxi,j), tot, 1); }
                if (mp[i][mxj]=='#') { add(id(i,mxj), tot, 1); }
                if (mp[mxi][mxj]=='#') { add(id(mxi,mxj), tot, 1); }

                if (i-1>=1) {
                    for (int y=j; y<=mxj; y++) { add(tot, id(i-1, y), 0); }
                }
                if (mxi+1<=r) {
                    for (int y=j; y<=mxj; y++) { add(tot, id(mxi+1, y), 0); }
                }
                if (j-1>=1) {
                    for (int x=i; x<=mxi; x++) { add(tot, id(x, j-1), 0); }
                }
                if (mxj+1<=c) {
                    for (int x=i; x<=mxi; x++) { add(tot, id(x, mxj+1), 0); }
                }

                if (Tx>=i && Tx<=mxi && Ty>=j && Ty<=mxj) { add(tot, id(Tx, Ty), 0); }
            }

            if (idi>=1 && idj>=1 && mp[i][j]=='.') {
                for (int x=0; x<4; x++) {
                    int ni=i+dx[x], nj=j+dy[x];
                    if (ni<1 || ni>r || nj<1 || nj>c) { continue; }
                    add(id(i,j), id(ni,nj), 0);
                }
            }
        }
    }
    
    S=id(Sx, Sy);
    T=id(Tx, Ty);

    bfs();

    return 0;
}